package com.jiang.剑指Offer.栈或队列.NC272;

import java.util.Stack;

/**
 * @author Jiang
 * @version 1.0
 * @date 2024/12/25 21:00
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param pushV int整型一维数组
     * @param popV int整型一维数组
     * @return bool布尔型
     */
    public boolean IsPopOrder (int[] pushV, int[] popV) {
        // write code here
        Stack<Integer> stack = new Stack<>();
        int i = 0; // 表示入栈索引
        int j = 0; // 表示出栈索引
        while(i < pushV.length) {
            if (pushV[i] == popV[j]) { // 如果入栈数等于出栈数,则两个索引加一
                j++;
                while (!stack.isEmpty() && stack.peek() == popV[j]) { // 判断出栈中的值是否和栈中的值相等
                    stack.pop();
                    j++;
                }
            } else { // 否则压入栈中，入栈索引加一
                stack.push(pushV[i]);
            }
            i++;
        }
        // 如果能遍历完出栈数组，则返回true
        return j == popV.length;
    }
}
